import { app, shell, BrowserWindow, screen } from 'electron'
import { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import icon from '../../resources/icon.png?asset'
import { createTcpServer } from './tcp/tcpServer';
import { setupIpcHandlers } from './ipc';
import createTestClientWindow from './clientWindow';

function createWindow(): BrowserWindow {
  // 获取主屏幕的尺寸
  const primaryDisplay = screen.getPrimaryDisplay();
  const { width, height } = primaryDisplay.workAreaSize;
  const margin = 10;
  const mainWindow = new BrowserWindow({
    width: 600,
    height: 800,
    x: Math.floor(width / 2)+300, // 窗口位置为屏幕左边
    y: margin, // 窗口位置为屏幕顶部
    show: false,
    autoHideMenuBar: true,
    ...(process.platform === 'linux' ? { icon } : {}),
    webPreferences: {
      preload: join(__dirname, '../preload/index.js'),
      sandbox: false
    }
  })

  mainWindow.on('ready-to-show', () => {
    mainWindow.show()
  })

  mainWindow.webContents.setWindowOpenHandler((details) => {
    shell.openExternal(details.url)
    return { action: 'deny' }
  })

  // 基于 electron-vite cli 的渲染器热模块替换 (HMR) 在开发环境中加载远程 URL，在生产环境中加载本地 html 文件
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
  } else {
    mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
  }
  return mainWindow;
}




// 当 Electron 完成初始化并准备创建浏览器窗口时将调用此方法。 一些 API 只能在此事件发生后才能使用。
app.whenReady().then(() => {
  // 为 Windows 设置应用程序用户模型 ID
  electronApp.setAppUserModelId('com.electron')

  // 在开发环境中默认使用 F12 打开或关闭 DevTools 在生产环境中忽略 CommandOrControl + R
  // 详见 https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window)
  })

  const win = createWindow();
  //主进程操作
  createTcpServer(win);
  setupIpcHandlers();
  // createTestClientWindow();

  app.on('activate', function () {
    // 在 macOS 上，当点击 dock 图标并且没有其他窗口打开时， 重新创建一个窗口是常见的做法。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})


app.on('window-all-closed', () => {
  // 当所有窗口都被关闭时退出应用，除非在 macOS 上。  在 macOS 上，应用程序及其菜单栏会保持激活，直到用户按 Cmd + Q 显式退出。
  if (process.platform !== 'darwin') {
    app.quit()
  }
})



